Software runs within an operating system concept called a process. A process may be an instance of a program running in a computer and may include the program code, private data, processor state (for example, the values in the processor registers) and so on. A process has one or more threads. A thread typically contains place holder information associated with a single instance of a multi-user program or a particular service request. For example, if multiple users are using a program, a thread may be created and maintained for each user or service request. Similarly, if, for example, a process is considered to be a container for a set of objects performing a function that performs several sub-functions, a separate thread may be created to execute each sub-function.
Some operating systems allow a process or thread within one process to call another function in another process. However, known techniques to accomplish this are limited in that typically functions that can be called in the other processes take only one parameter and return only one result of a particular type. This means that only certain functions (those that can take only one parameter and return a particular type of result) can be controlled remotely. It would be helpful if a more versatile method of controlling a function within a process from another process were available, so that any arbitrary function within a process could be controlled from another process.